<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 skin-theme-clientpref-day vector-sticky-header-enabled" lang="de" dir="ltr"><head>
<meta charset="UTF-8">
<title>Opcode</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://de.wikipedia.org/wiki/Opcode"> <link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link href="./_mw_/ext.gadget.citeRef.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.defaultPlainlinks.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonHide.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonLayout.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonStyle.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiDarkmode.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiResponsive.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.specialSearch.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Opcode rootpage-Opcode skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Opcode</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="de" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="de" dir="ltr"><p>Ein <b>Opcode</b>, auch <b>op code</b> oder <b>operation code</b>, ist eine Zahl, die die Nummer eines <a href="Maschinensprache" title="Maschinensprache">Maschinenbefehls</a> für einen bestimmten <a href="Prozessor" title="Prozessor">Prozessortyp</a> angibt. Alle Opcodes zusammen bilden den <a href="Befehlssatz" title="Befehlssatz">Befehlssatz</a> des Prozessors oder der Prozessorfamilie. Jeder <a href="Befehl_(Computer)" title="Befehl (Computer)">Befehl</a> hat einen eigenen Opcode, etwa die Addition, Multiplikation, das Kopieren von <a href="Register_(Computer)" class="mw-redirect" title="Register (Computer)">Registern</a>, Laden und Speichern von Registern aus dem <a href="Arbeitsspeicher" title="Arbeitsspeicher">Arbeitsspeicher</a>, Ein- und Ausgabe usw. Einfache Opcodes stellen bereits einen Maschinenbefehl dar. Auf einen Teil der Opcodes müssen Adressen, Konstanten oder Ähnliches folgen, die dann zusammen mit dem Opcode einen Maschinenbefehl bilden.
</p><p>Jedem Opcode wird ein kurzes Wort oder eine Abkürzung, ein <a href="Mnemotechnik" title="Mnemotechnik">Mnemonic</a>, zugeordnet. Mit den Mnemonics ergeben sich die <a href="Assemblersprache" title="Assemblersprache">Assemblersprachen</a>, bei denen jeweils ein Mnemonic, gegebenenfalls gefolgt von Adressen oder Konstanten, in eine Zeile einer Textdatei geschrieben wird. Ein spezielles Programm, der <a href="Assembler_(Informatik)" title="Assembler (Informatik)">Assembler</a>, erzeugt Maschinencode, indem es im Wesentlichen die Mnemonics durch ihre jeweiligen Opcodes ersetzt.
</p><p>Die meisten modernen Prozessoren besitzen einige hundert Opcodes.
</p><p>Ältere Prozessoren hatten oft „undefinierte“ oder „illegale“ Opcodes. Bestimmte, für die Programmierung gar nicht vorgesehene Opcodes konnten durch ihre Nebenwirkungen auf den internen Schaltungsaufbau des Prozessors allerhand seltsame, schädliche oder seltener auch nützliche Effekte haben. Solche Opcodes wurden manchmal bei der Programmierung von <a href="Computerspiel" title="Computerspiel">Computerspielen</a> auf <a href="Heimcomputer" title="Heimcomputer">Heimcomputern</a> und frühen <a href="Spielkonsole" title="Spielkonsole">Spielkonsolen</a> benutzt, um bestimmte Vorgänge ein wenig schneller ablaufen zu lassen oder um die Funktionsweise eines <a href="Kopierschutz" title="Kopierschutz">Kopierschutzes</a> zu verschleiern. Nachteilig war, dass solche „undefinierten Opcodes“ vom Hersteller nicht garantiert wurden und auf Nachfolgemodellen eines Prozessors oft nicht mehr funktionierten. Heutige Prozessoren tun dagegen entweder überhaupt nichts, wenn sie in einem Programm einen unbekannten Opcode antreffen, oder aber sie begeben sich in einen klar definierten Fehlerzustand.
</p>
<div class="mw-heading mw-heading2"><h2 id="Der_8-Bit-Prozessor_Z80">Der 8-Bit-Prozessor Z80</h2></div>
<table class="wikitable">
<tbody><tr class="hintergrundfarbe6">
<th>Opcode<br>in <a href="Hexadezimalsystem" title="Hexadezimalsystem">hex</a></th>
<th>Mnemonic</th>
<th>Beschreibung
</th></tr>
<tr>
<td>04</td>
<td><b>INC B</b></td>
<td>erhöhe Register B um eins (engl. <b>inc</b><i>rement</i> <b>B</b>)
</td></tr>
<tr>
<td>05</td>
<td><b>DEC A</b></td>
<td>vermindere Register A um eins (engl. <b>dec</b><i>rement</i> <b>A</b>)
</td></tr>
<tr>
<td>90</td>
<td><b>SUB B</b></td>
<td><b>sub</b>trahiere Register <b>B</b> von Akkumulator A
</td></tr>
<tr>
<td>21 ll hh</td>
<td><b>LD HL,hhll</b></td>
<td><b>l</b>oa<b>d</b> HL mit der Konstante hhll
</td></tr>
<tr>
<td>…</td>
<td>…</td>
<td><i>weitere Befehle</i>
</td></tr></tbody></table>
<p>Bemerkung: Für den <a href="Z80" class="mw-redirect" title="Z80">Z80</a> gibt es zwei verschiedene Mnemonics (LD M,B bzw. LD (HL),B), hinzu kommt eine dritte für die Vorgänger-CPU Intel 8085 (MOV M,B).
</p><p>Folgende Z80-Mnemonics
</p>
<pre> DEC A
INC B
SUB B
LD HL,1234h
</pre>
<p>erzeugen folgendes Z80-Maschinenprogramm
</p>
<pre> 05 04 90 21 34 12
</pre>
<p>Maschinenprogramme werden heutzutage praktisch immer <a href="Hexadezimal" class="mw-redirect" title="Hexadezimal">hexadezimal</a> dargestellt (seltene Alternativen: dezimal, <a href="Oktalsystem" title="Oktalsystem">oktal</a>). Manchmal werden 16-Bit-Werte nicht als zwei 8-Bit-Worte in der Bytereihenfolge im Hauptspeicher, sondern als ein 16-Bit-Wort in der logischen Reihenfolge angezeigt:
</p>
<pre> 05 04 90 21 1234
</pre>
<div class="mw-heading mw-heading2"><h2 id="Der_Relaisrechner_Zuse_Z3">Der Relaisrechner Zuse Z3</h2></div>
<p>Die <a href="Zuse_Z3" title="Zuse Z3">Z3</a> von <a href="Konrad_Zuse" title="Konrad Zuse">Konrad Zuse</a> aus dem Jahre <a href="1941" title="1941">1941</a> hatte zwei Register R1 und R2, 64 Speicherzellen und beherrschte die Ein-/Ausgabe, die vier <a href="Grundrechenart" title="Grundrechenart">Grundrechenarten</a> und die <a href="Wurzelziehen" class="mw-redirect" title="Wurzelziehen">Wurzelberechnung</a> von Gleitkommazahlen. Programme wurden auf <a href="Lochstreifen" title="Lochstreifen">Lochstreifen</a> abgelegt, die Opcodes der neun Befehle bestanden aus den folgenden Lochstreifencodierungen:
</p>
<table class="wikitable">
<tbody><tr class="hintergrundfarbe6">
<th>Opcode<br>auf dem<br>Lochstreifen</th>
<th>Mnemonic</th>
<th>Beschreibung
</th></tr>
<tr>
<td><code>-O·OO----</code></td>
<td><b>Lu</b></td>
<td>Anhalten, Eingabe R1 einer Dezimalzahl von der Tastatur, R2:=undef
</td></tr>
<tr>
<td><code>-O·OOO---</code></td>
<td><b>Ld</b></td>
<td>Anhalten, dezimale Anzeige des Ergebnisses
</td></tr>
<tr>
<td><code>OO·zzzzzz</code></td>
<td><b>Pr z</b></td>
<td>Lesen der Speicherzelle <i>z</i> (erst R1, danach immer R2)
</td></tr>
<tr>
<td><code>O-·zzzzzz</code></td>
<td><b>Ps z</b></td>
<td>Schreiben von R1 in Speicherzelle <i>z</i>
</td></tr>
<tr>
<td><code>-O·O-----</code></td>
<td><b>La</b></td>
<td>Addition R1:=R1+R2, R2:=0
</td></tr>
<tr>
<td><code>-O·O-O---</code></td>
<td><b>Ls</b></td>
<td>Subtraktion R1:=R1-R2, R2:=0
</td></tr>
<tr>
<td><code>-O·--O---</code></td>
<td><b>Lm</b></td>
<td>Multiplikation R1:=R1*R2, R2:=0
</td></tr>
<tr>
<td><code>-O·-O----</code></td>
<td><b>Li</b></td>
<td>Division R1:=R1/R2, R2:=0
</td></tr>
<tr>
<td><code>-O·-OO---</code></td>
<td><b>Lw</b></td>
<td>Wurzelberechnung R1:=Wurzel(R1), R2:=0
</td></tr></tbody></table>
<p>O : Loch, - : kein Loch, · : Transportloch, zzzzzz : binär codierte Speicherstelle 0…63
</p><p>Der Lochstreifen ist 8 Bits breit und weist ein asymmetrisches Transportloch zwischen dem zweiten und dritten Bit auf. Die Opcodes für die Speicherzugriffe belegen nur 2 Bits, gefolgt von der Adresse der Speicherzelle. Die anderen Opcodes belegen 5 Bits, 3 Bits sind unbenutzt.
</p>
<div class="mw-heading mw-heading2"><h2 id="Weblinks">Weblinks</h2></div>
<ul><li>Raúl Rojas: <cite class="lang" lang="en" dir="auto" style="font-style:italic">Konrad Zuse’s Legacy: The Architecture of the Z1 and Z3</cite>. In: <cite class="lang" lang="en" dir="auto" style="font-style:italic">IEEE Annals of the History of Computing</cite>. Vol. 19, <span style="white-space:nowrap">Nr.<span style="display:inline-block;width:.2em"> </span>2</span>, 1997, <span style="white-space:nowrap">S.<span style="display:inline-block;width:.2em"> </span>5–16</span> (englisch, <a rel="nofollow" class="external text" href="https://ed-thelen.org/comp-hist/Zuse_Z1_and_Z3.pdf">ed-thelen.org</a> [PDF; <span style="white-space:nowrap">305<span style="display:inline-block;width:.2em"> </span>kB</span>; abgerufen am 11. Oktober 2018]).<span class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rfr_id=info:sid/de.wikipedia.org:Opcode&rft.atitle=Konrad+Zuse%E2%80%99s+Legacy%3A+The+Architecture+of+the+Z1+and+Z3&rft.au=Ra%C3%BAl+Rojas&rft.date=1997&rft.genre=journal&rft.issue=2&rft.jtitle=IEEE+Annals+of+the+History+of+Computing&rft.pages=5-16&rft.volume=Vol.+19" style="display:none"> </span></li></ul></div><!--htdig_noindex--><div><div class="zim-footer">
Dieser Artikel wurde von <a class="external text" title="Zuletzt bearbeitet am 2025-12-22" href="https://de.wikipedia.org/wiki/?title=Opcode&oldid=262648016">Wikipedia</a> herausgegeben. Der Text ist unter <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de">Creative Commons Attribution-Share Alike 4.0</a> verfügbar, sofern nicht anders angegeben. Für die Mediendateien können zusätzliche Bedingungen gelten.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>
</body></html>